iT邦幫忙

2023 iThome 鐵人賽

DAY 10
0
AI & Data

跟我一起在AI的世界裡打怪獸系列 第 10

Day10 要選陣圖還是陣符群?-框架和函式庫的異同

  • 分享至 

  • xImage
  •  

框架和函式庫是新手在寫程式初期常常會混淆的知識。

但其實只要理解他們兩個的不同處,就可以很輕鬆了分辨出來,今天就讓我們好好了解一下他們吧!


函式庫(Library)

把想要做的事情寫成函式,再分門別類集合起來。

當程式設計師們再寫程式的時候方現一件事,如果我要重複做某件事的時候,一直寫整段長長的程式真的會很麻煩,所以他們就把會需要做到的事情寫成一個「函式」,就像Excel中的SUM、MIN。然後把他們功能類型相同的歸類在同一個函式庫,比如Python中數據操作的放在Numpy、數據蒐集的放在BeautifulSoup……等。

這樣有兩個好處,第一個是如果你有需求,不用一個一個函式去抓下來;第二個好處是,因為他已經分門別類了,所以只要下載相應的函式庫就好,不用一次全部抓下來占空間。

下面就介紹一些常用的函式庫:

數據清理與操作

  • Numpy
    是數據科學中的基礎函式庫,其他如Pandas、Scipy等都依賴於它來進行數據處理和科學計算。提供了多維數組及相關的數學函數,也包含了許多線性代數、隨機數生成等功能。
  • Scipy
    基於NumPy構建,提供了許多高階科學計算的功能,包括積分、最優化、線性代數、傅立葉變換等。
  • Pandas
    是數據分析和處理中的核心,其中最重要的是DataFrame。支援讀取和寫入多種數據格式,如CSV、Excel、SQL數據庫等。

數據蒐集

  • BeautifulSoup
    用於網頁解析和爬蟲,能夠從HTML或XML文檔中提取數據。提供了方便的API來遍歷和檢索網頁結構中的信息,且支援不同的解析器(如html.parser、lxml等)。

視覺化

  • Matplotlib
    是最基礎、最常用的繪圖庫,提供了各種用於生成2D圖表和圖形的功能,包括折線圖、散點圖、柱狀圖等。支援多種輸出格式,如PNG、PDF等。使用者可以對圖表的標籤、顏色、線型等部分進行自定義。
  • Seaborn
    可以輕鬆繪製各種統計圖表,如箱型圖、散點圖矩陣等,且支援多變量分析和複雜數據集的可視化。內建了許多漂亮的主題和顏色樣式,可以使得圖表的外觀更為吸引人和清晰。
  • Plotly
    支援生成動態、可縮放的圖表,可以在網頁上進行交互式操作,包括折線圖、散點圖、地圖等。提供了Dash框架,可以用於構建交互式數據應用程序。
  • Ggplot
    是一個Python版本的ggplot2(原本是R那邊的),提供了一套高級的語法和模型,可以方便地進行數據可視化和分析。支援各種常見的統計圖表,如散點圖、直方圖、線圖等。

想認識更多相關的資料庫可以看這兩篇我覺得寫得很好的文章Python零基礎到kaggle-Day3、終於把所有的Python庫,都整理出來囉!

也可以直接到Python的官網了解。

框架(Framwork)

把會用到的函式都先包山包海裝到一起,還幫你做出基本的架構。

框架與函式庫最大的不同就是,他已經幫你把整件事情的流程都統合出來了,接下來你要做的事情只有依照你的想法,把需要的東西放到相應的位置就好了。

這樣可以解決寫一個程式需要去下載很多函式庫的問題,而且因為有基礎的骨架,所以後續要應用就非常方便。

這邊也舉幾個常用在機器學習的框架:

TensorFlow

  • 由Google開發和維護。
  • 提供靈活的數據流圖計算模型,適用於各種機器學習和深度學習。
  • 支援自動微分、GPU加速運算等,適用於大規模和高性能計算。

PyTorch

  • Facebook開發。
  • 使用動態計算圖,更容易理解和調試。
  • 具有靈活的張量運算和強大的GPU支援。

Scikit-learn

  • 開源的機器學習庫,提供了許多常見的機器學習算法和工具。
  • 專注於傳統的監督和非監督學習算法,並提供了評估的工具。
  • 簡單易用,適合用於初學者和快速原型開發。

Keras

要注意的是,它的主要設計者曾說:「Keras被認為是一個介面,而不是獨立的機器學習框架。」

  • 是開源神經網路庫,或說是高階深度學習程式庫,能搭配TensorFlow、Theano、CNTK等框架運作。
  • 目的是快速進行深度神經網路,Keras已經建架構好訓練模型的輸入層、隱藏層、輸出層,運用時只需要放進相應的參數或函式,就可以輕鬆建立、訓練和評估神經網絡模型。
  • 適用於快速原型開發和研究實驗。

由此可知,Keras主要是配合TensorFlow、Theano、CNTK等框架運行的。

陣符群 & 一大張架構好的陣圖的區別

看完上面的介紹,應該可以大概理解「程式庫」、「框架」的區別了吧?

如果你有事先查過這兩者,應該常常看到這個解釋:

You call library. Framework calls you.

簡單來說,就是如果你是用程式庫,那只有在你需要的時候才會把他叫進來;但如果你用框架,就是一個被他牽著走的過程,因為主要的流程他都架好了,你需要做的就是填入你的參數。

這樣應該很好理解各自的優缺點,框架的優點就是寫程式的過程比函式庫方便,因為你只需要按照他的規則走,填入少少的程式碼,其他細節他會幫你處理,你可以得到你想要的模型。但缺點就是你會被他限制住,即使有些地方不和你的異你也得照著做。

而函式庫就自由多了,你想要用就引進來,不要用就不要用。但缺點也很明顯,你必須要從基礎一步步架構起來。

我們再來看一些好玩的解釋!這就像你要寫一個魔法陣,函式庫就像是給你許多不同的陣符群,法術符文群裡面有雷擊、火烈、急凍等;攻擊符文群裡有衝撞、投石、暴雨梨花針(?);控制符文群裡有迷惑、昏亂、束縛,你需要用那些就把那些放進去。

框架就像是一個已經畫好的陣圖,你想要做什麼就在相應的位置填上去就好了,非常方便。但如果你會用到裡面沒有的東西,比如在專門做法術的框架裡要加入暴雨梨花針,可能就會遇到困難。

這樣形容會比較有概念嗎XD

結語

希望你們能看懂,不管是用哪種解釋方式。這兩種沒有優劣,只是看你當下的需求,選擇一種最好的方式。

明天來介紹Python吧。

先去睡啦,經過第一次上傳的時候不小心按到叉叉後又重新打一遍……我已經要乾掉惹。


上一篇
Day9 施放咒語的場所-整合式開發環境(IDE)
下一篇
Day11 老打鐵的武器舖二刷-開始打造你自己的Python工具箱
系列文
跟我一起在AI的世界裡打怪獸30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言